approaches: service layer architecture module-based architecture folder-by-type VIPER architecture ~ abstractions in programming are a way of chunking problems ~ first, write down a clear problem definition